package com.example.bobo.yuejian322.MyImage;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;

/**
 * Created by 木子也 on 2017/5/24.
 */


 public class CircleImageView extends AppCompatImageView {
    private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);
    private Bitmap mRawBitmap;
    private BitmapShader mShader;
    private Matrix mMatrix = new Matrix();

            public CircleImageView(Context context, AttributeSet attrs) {
                super(context, attrs);
            }

            @Override
     protected void onDraw(Canvas canvas) {
                Bitmap rawBitmap = getBitmap(getDrawable());
                if (rawBitmap != null){
                       int viewWidth = getWidth();
                         int viewHeight = getHeight();
                        int viewMinSize = Math.min(viewWidth, viewHeight);
                         float dstWidth = viewMinSize;
                        float dstHeight = viewMinSize;
                       if (mShader == null || !rawBitmap.equals(mRawBitmap)){
                                 mRawBitmap = rawBitmap;
                                mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
                           }
                         if (mShader != null){
                                mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight());
                                mShader.setLocalMatrix(mMatrix);
                             }
                         mPaintBitmap.setShader(mShader);
                         float radius = viewMinSize / 2.0f;
                         canvas.drawCircle(radius, radius, radius, mPaintBitmap);
                     } else {
                         super.onDraw(canvas);
                     }
             }

             private Bitmap getBitmap(Drawable drawable){
                 if (drawable instanceof BitmapDrawable){
                         return ((BitmapDrawable)drawable).getBitmap();
                     } else if (drawable instanceof ColorDrawable){
                         Rect rect = drawable.getBounds();
                         int width = rect.right - rect.left;
                         int height = rect.bottom - rect.top;
                         int color = ((ColorDrawable)drawable).getColor();
                         Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                         Canvas canvas = new Canvas(bitmap);
                         canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
                         return bitmap;
                     } else {
                         return null;
                     }
             }
 }